package com.koro.controller;


import com.koro.dto.SaveOrdersDTO;
import com.koro.service.FlashSaleService;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
@Slf4j
public class TestConsumer {


    @Autowired
    private FlashSaleService flashSaleService;

    @RabbitListener(queues = "seckill.qu")
    @RabbitHandler
    public String testConsumer(SaveOrdersDTO dto, Channel channel, Message message) throws Exception {
        log.info("消费消息:{}", dto.toString());

        // 自动下单
        flashSaleService.sub(dto);

        /**
         * ACK，用的最多的一种
         * deliveryTag:该消息的index
         * false:表示不是批量
         */
        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        /**
         * Nack:手动拒绝
         * deliveryTag:该消息的index
         * false:表示不是批量
         * false：被拒绝的是否重新入队列，一般默认false,因为第一次被拒绝后，后面多次肯定也被拒绝
         */
//        channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
        /**
         * Reject:手动拒绝,和Nack相比少一个参数
         * deliveryTag:该消息的index
         * false：被拒绝的是否重新入队列，一般默认false,因为第一次被拒绝后，后面多次肯定也被拒绝
         */
//        channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
        return "消费-result";
    }



}

